#ifndef MAP_H
#define MAP_H

#include "mapitem.h"
#include "door.h"
#include "player.h"
#include <QDebug>

#define XMAX 1000;
#define YMAX 1000;

#define ROWSMAX 100
#define COLUMNSMAX 100;

class Map
{
public:
    Map(int rows, int columns, int width, int height);
    ~Map();

    Door *getDoor();
    MapItem *getMapItem(int i, int j);
    int getRows();
    int getColumns();
    int getWidth();
    int getHeight();
    QRect getGeometryAt(int i, int j);
    void getMapItemContainingCoord(int x, int y, int &rown, int &column);
    QList<MapItem*> getMapItemsContaining(Unit *unit);

    void setDoor(Door *door);
    void setMapItem(int i, int j, MapItem *item);
    void setRows(int rows);
    void setColumns(int columns);
    void setWidth(int width);
    void setHeight(int height);

    void initMatrix();
    void removeMapItem(int i, int j);
    int countFruits();
    void draw(QPainter *painter);
    bool digBlock(MapItem *item);
    bool digBlock(int i, int j);
    bool eatFruit(int i, int j);
    bool eatFruit(MapItem *item);
    void serializeDebug(QDebug &dbg);
    void serializeIn(QDataStream &in);
    void serializeOut(QDataStream &out);



private:
    int m_rows;
    int m_columns;
    int m_width;
    int m_height;

    QVector< QVector<MapItem*> > m_matrix;
    Door *m_door;
};


QDataStream & operator << (QDataStream &out, Map* map);
QDataStream & operator >> (QDataStream &in,  Map* map);
QDebug operator<<(QDebug dbg, Map *map);

#endif // MAP_H
